From: Robert Lipe Date: Sat, 31 Dec 2016 06:34:46 +0000 (-0600) Subject: Jukka adds waypoint support for Garmin FIT. X-Git-Tag: archive/raspbian/1.10.0+ds-2+rpi1~1^2~12^2~9^2~5 X-Git-Url: https://dgit.raspbian.org/%22http:/www.example.com/cgi/%22https://%22%22/%22http:/www.example.com/cgi/%22https:/%22%22?a=commitdiff_plain;h=ddff1a5dda5723d10edbc52449611c53ed3bba0c;p=gpsbabel.git Jukka adds waypoint support for Garmin FIT. --- diff --git a/garmin_fit.cc b/garmin_fit.cc index 21ba61be3..65e9878bc 100644 --- a/garmin_fit.cc +++ b/garmin_fit.cc @@ -27,6 +27,7 @@ #define MYNAME "fit" static char* opt_allpoints = NULL; +static int lap_ct = 0; static arglist_t fit_args[] = { @@ -330,6 +331,13 @@ fit_parse_data(fit_message_def* def, int time_offset) int8_t temperature = 0x7f; int i; Waypoint* waypt; + int32_t startlat = 0x7fffffff; + int32_t startlon = 0x7fffffff; + int32_t endlat = 0x7fffffff; + int32_t endlon = 0x7fffffff; + uint32_t starttime = 0; // ??? default ? + char cbuf[10]; + Waypoint* lappt; // WptPt in gpx if (global_opts.debug_level >= 7) { debug_print(7,"%s: parsing fit data ID %d with num_fields=%d\n", MYNAME, def->global_id, def->num_fields); @@ -347,7 +355,7 @@ fit_parse_data(fit_message_def* def, int time_offset) fit_data.last_timestamp = timestamp = val; } else { switch (def->global_id) { - case 20: // record message + case 20: // record message - trkType is a track switch (f->id) { case 0: if (global_opts.debug_level >= 7) { @@ -403,6 +411,57 @@ fit_parse_data(fit_message_def* def, int time_offset) } temperature = val; break; + case 19: // lap wptType , endlat+lon is wpt + switch (f->id) { + case 2: + if (global_opts.debug_level >= 7) { + debug_print(7,"%s: parsing fit data: starttime=%d\n", MYNAME, val); + } + starttime = val; + break; + case 3: + if (global_opts.debug_level >= 7) { + debug_print(7,"%s: parsing fit data: startlat=%d\n", MYNAME, val); + } + startlat = val; + break; + case 4: + if (global_opts.debug_level >= 7) { + debug_print(7,"%s: parsing fit data: startlon=%d\n", MYNAME, val); + } + startlon = val; + break; + case 5: + if (global_opts.debug_level >= 7) { + debug_print(7,"%s: parsing fit data: endlat=%d\n", MYNAME, val); + } + endlat = val; + break; + case 6: + if (global_opts.debug_level >= 7) { + debug_print(7,"%s: parsing fit data: endlon=%d\n", MYNAME, val); + } + endlon = val; + break; + case 7: + if (global_opts.debug_level >= 7) { + debug_print(7,"%s: parsing fit data: elapsedtime=%d\n", MYNAME, val); + } + //elapsedtime = val; + break; + case 9: + if (global_opts.debug_level >= 7) { + debug_print(7,"%s: parsing fit data: totaldistance=%d\n", MYNAME, val); + } + //totaldistance = val; + break; + default: + if (global_opts.debug_level >= 1) { + debug_print(1, "%s: unrecognized data type in GARMIN FIT lap: f->id=%d\n", MYNAME, f->id); + } + break; + } // switch (f->id) + break; default: if (global_opts.debug_level >= 1) { debug_print(1, "%s: unrecognized data type in GARMIN FIT record: f->id=%d\n", MYNAME, f->id); @@ -417,6 +476,21 @@ fit_parse_data(fit_message_def* def, int time_offset) debug_print(7,"%s: storing fit data with num_fields=%d\n", MYNAME, def->num_fields); } switch (def->global_id) { + case 19: // lap message + if (endlat == 0x7fffffff || endlon == 0x7fffffff) { + break; + } + if (global_opts.debug_level >= 7) { + debug_print(7,"%s: storing fit data LAP %d\n", MYNAME, def->global_id); + } + lappt = new Waypoint; + lappt->latitude = (endlat / (double)0x7fffffff) * 180; + lappt->longitude = (endlon / (double)0x7fffffff) * 180; + lap_ct++; + snprintf(cbuf, sizeof(cbuf), "LAP%03d", lap_ct); + lappt->shortname = cbuf; + waypt_add(lappt); + break; case 20: // record message if ((lat == 0x7fffffff || lon == 0x7fffffff) && !opt_allpoints) { break;